[DllImport("advapi32.dll", EntryPoint="EnumServicesStatusW", ExactSpelling=true, SetLastError=true)]
static extern bool EnumServicesStatus( IntPtr hSCManager,
SERVICE_TYPES dwServiceType,
SERVICE_STATE dwServiceState,
IntPtr lpServices,
int cbBufSize,
ref int pcbBytesNeeded,
ref int lpServicesReturned,
ref int lpResumeHandle );
Declare Function EnumServicesStatus Lib "advapi32.dll" (TODO) As TODO
None.
None.
Please add some!
IntPtr handle = OpenSCManager( null, null, SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
if ( handle != IntPtr.Zero )
{
int iBytesNeeded = 0;
int iServicesReturned = 0;
int iResumeHandle = 0;
if ( !EnumServicesStatus( handle,
SERVICE_TYPES.SERVICE_WIN32,
SERVICE_STATE.SERVICE_STATE_ALL,
IntPtr.Zero,
0,
ref iBytesNeeded,
ref iServicesReturned,
ref iResumeHandle ) )
{
IntPtr buf = Marshal.AllocHGlobal( (int) iBytesNeeded );
if ( !EnumServicesStatus( handle,
SERVICE_TYPES.SERVICE_WIN32,
SERVICE_STATE.SERVICE_STATE_ALL,
buf,
iBytesNeeded,
ref iBytesNeeded,
ref iServicesReturned,
ref iResumeHandle ) )
{
Debug.WriteLine("EnumServicesStatus Failed " + Marshal.GetLastWin32Error() );
}
else
{
ENUM_SERVICE_STATUS serviceStatus;
int iPtr = buf.ToInt32();
for ( int i = 0 ; i < (int) iServicesReturned; i++ )
{
serviceStatus = (ENUM_SERVICE_STATUS) Marshal.PtrToStructure( new IntPtr(iPtr), typeof(ENUM_SERVICE_STATUS) );
Debug.WriteLine("Service " + serviceStatus.pServiceName );
iPtr += ENUM_SERVICE_STATUS.SizeOf;
}
Debug.WriteLine("EnumServicesStatus Success");
}
Debug.WriteLine("EnumServicesStatus " + Marshal.GetLastWin32Error() );
}
}
Do you know one? Please contribute it!